package main

import (
	"github.com/gorilla/websocket"
	"go/impl"
	"net/http"
	"time"
)
//完成协议转换,转换器
var(
	upgrade = websocket.Upgrader{
		//握手的过程中涉及跨域的时候,允许跨域
		CheckOrigin: func(r *http.Request) bool {
			return true
		},
	}
)
func wsHandler(w http.ResponseWriter, r *http.Request){
	var(
		wsConn *websocket.Conn
		err error
		data []byte
		conn *impl.Connection
	)
	//Upgrade:websocket
	if wsConn,err  = upgrade.Upgrade(w,r,nil);err !=nil{
		return
	}
	//拿到长连接

	//websocket.Conn
	//数据收发
	if conn,err = impl.InitConnection(wsConn);err!=nil{
		goto ERR
	}

	go func(){
		var(
			err error
		)
		for{
			if err = conn.WriteMessage([]byte("heartbeat"));err !=nil{
				return
			}
			//每隔1秒发送一个心跳消息
			time.Sleep(1 * time.Second)
		}

	}()

	for{
		if data,err = conn.ReadMessage();err!=nil{
			goto ERR
		}
		if err=conn.WriteMessage(data);err!=nil{
			goto ERR
		}
	}

ERR:
	//关闭连接的操作
	conn.Close()
}
func main() {
	/**
	 * 当客户端调用ws接口的时候,wsHandler这个函数就会被调用
	 * 它会传给我们一个请求和一个应搭
	 * 我们把结果发给这个应搭对象ResponseWriter就可以了
	 * api地址是  http://localhost:7777/ws
	 */
	http.HandleFunc("/ws",wsHandler)
	//服务端启动,绑定一个端口,对外提供服务,0.0.0.0表示本机的任意地址
	http.ListenAndServe("0.0.0.0:7777",nil)
}
